﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsColindancia_CRN:clsEstado,IControlEstados
    {
        public clsMedida_CRN Medida { get; set; }
        public string Orientacion { get; set; }
        public decimal Metros { get; set; }
        public string ColindaCon { get; set; }
        public int IDColindancia { get; set; }

        public clsColindancia_CRN(clsMedida_CRN objMedida):base()
        {
            this.ColindaCon = string.Empty;
            this.Medida = objMedida;
            this.Metros = 0;
            this.Orientacion = string.Empty;
        }

        public clsColindancia_CRN(clsMedida_CRN objMedida, string strOrientacion)
            : base()
        {
            this.ColindaCon = string.Empty;
            this.Medida = objMedida;
            this.Metros = 0;
            this.Orientacion = strOrientacion;
        }

        #region Métodos

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaColindancia();
                else
                {
                    if (this.EsModificado)
                        return ModificaColindancia();
                    else
                        return EliminaColindancia();
                }
            }
            return false;
        }

        private bool EliminaColindancia()
        {
            clsColindancia_CD objColindancia_CD = new clsColindancia_CD();
            return objColindancia_CD.EliminaColindancia(this);
        }

        private bool ModificaColindancia()
        {
            clsColindancia_CD objColindancia_CD = new clsColindancia_CD();
            return objColindancia_CD.ActualizaColindancia(this);
        }

        private bool CreaColindancia()
        {
            clsColindancia_CD objColindancia_CD = new clsColindancia_CD();
            return objColindancia_CD.CreaColindancia(this);
        }

        public bool DatosValidos()
        {
            if ((this.Metros == 0) && (this.ColindaCon.Length == 0))
            {
                this.EsEliminado = true;
                return true;
            }
            return true;
        }

        public static BindingList<clsColindancia_CRN> RecuperaColindancias(clsMedida_CRN objMedida)
        {
            BindingList<clsColindancia_CRN> blColindancias = new BindingList<clsColindancia_CRN>();
            clsColindancia_CD objColindancia_CD = new clsColindancia_CD();
            BindingList<dsTerreno.ColindanciasRow> blColindanciasRecuperadas = objColindancia_CD.RecuperaColindancias(objMedida.Terreno.Inmueble.Avaluo.IdAvaluo);
            foreach (dsTerreno.ColindanciasRow filaColindancia in blColindanciasRecuperadas)
            {
                clsColindancia_CRN objColindancia = new clsColindancia_CRN(objMedida);
                objColindancia.ColindaCon = filaColindancia.ColindaCon;
                objColindancia.EsModificado = true;
                objColindancia.IDColindancia = filaColindancia.ID;
                objColindancia.Metros = filaColindancia.Metros;
                objColindancia.Orientacion = filaColindancia.Orientacion;
                blColindancias.Add(objColindancia);
            }
            return blColindancias;
        }

        #endregion
    }
}
